
#include "can.hxx"

using std::initializer_list;
using std::set;
using std::string;

////////////////////////////////////////////////////////////////////////////////

void can::insert(const string& host, const initializer_list<string>& collection)
{
    insert(host, collection.begin(), collection.end());
}

void can::erase(const string& host)
{
    const auto h = hosts.find(host);

    if(h != hosts.end())
    {
        for(const auto& file : h->second)
        {
            const auto f = files.find(file);

            f->second.erase(host);

            if(f->second.size() == 0)
            {
                files.erase(f);
            }
        }

        hosts.erase(h);
    }
}

set<string> can::get_files() const
{
    set<string> keys;

    for(const auto& pair : files)
    {
        keys.insert(pair.first);
    }

    return keys;
}

set<string> can::get_hosts() const
{
    set<string> keys;

    for(const auto& pair : hosts)
    {
        keys.insert(pair.first);
    }

    return keys;
}

set<string> can::get_hosts(const string& file) const
{
    auto i = files.find(file);

    if(i != files.end())
    {
        return i->second;
    }

    return set<string>();
}

////////////////////////////////////////////////////////////////////////////////
